package trastienda.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import trastienda.excepcion.DAOExcepcion;
import trastienda.modelo.Equipo;
import trastienda.util.ConexionBD;

public class EquipoDAO extends BaseDAO {

	public Equipo obtenerPorIdEquipo(String idEquipo) throws DAOExcepcion {
		String query = "select idEquipo,Nombre,fabricante,modelo,num_serie,memoria,dd,fecha_adqui,encargado,area from inventario_hard where idEquipo=?";
		Equipo vo = new Equipo();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idEquipo);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdEquipo(rs.getString("idEquipo"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setFabricante(rs.getString("fabricante"));
				vo.setModelo(rs.getString("modelo"));
                                vo.setNum_serie(rs.getString("num_serie"));
                                vo.setMemoria(rs.getString("memoria"));
                                vo.setDd(rs.getString("dd"));
                                vo.setFecha_adqui(rs.getString("fecha_adqui"));
                                vo.setEncargado(rs.getString("encargado"));
                                vo.setArea(rs.getString("area"));

			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Collection<Equipo> buscarPorNombre(String nombre)
			throws DAOExcepcion {
		String query = "select idEquipo,Nombre,Fabricante,Modelo,Num_serie,Memoria,dd,fecha_adqui,encargado,area from inventario_hard where Nombre like ?";
		Collection<Equipo> c = new ArrayList<Equipo>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Equipo vo = new Equipo();
				vo.setIdEquipo(rs.getString("idEquipo"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setFabricante(rs.getString("Fabricante"));
				vo.setModelo(rs.getString("Modelo"));
                                vo.setNum_serie(rs.getString("Num_serie"));
                                vo.setMemoria(rs.getString("Memoria"));
                                vo.setDd(rs.getString("dd"));
                                vo.setFecha_adqui(rs.getString("fecha_adqui"));
                                vo.setEncargado(rs.getString("encargado"));
                                vo.setArea(rs.getString("area"));

                                c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	public Equipo insertar(Equipo vo) throws DAOExcepcion {
		String query = "INSERT INTO inventario_hard (idEquipo,Nombre,Fabricante,Modelo,Num_serie,Memoria,dd,fecha_adqui,encargado,area) "
				+ "VALUES (?,?,?,?,?,?,?,?,?,?)";
		System.err.println(query);
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getIdEquipo());
			stmt.setString(2, vo.getNombre());
			stmt.setString(3, vo.getFabricante());
			stmt.setString(4, vo.getModelo());
			stmt.setString(5, vo.getNum_serie());
			stmt.setString(6, vo.getMemoria());
                        stmt.setString(7, vo.getDd());
                        stmt.setString(8, vo.getFecha_adqui());
                        stmt.setString(9, vo.getEncargado());
                        stmt.setString(10, vo.getArea());


			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Equipo actualizar(Equipo vo) throws DAOExcepcion {
		String query = "UPDATE inventario_hard SET Nombre=?, Fabricante=?, Modelo=?, Num_serie=?, Memoria=?, dd=?, fecha_adqui=?, encargado=?, area=? WHERE idEquipo=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
                        con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombre());
			stmt.setString(2, vo.getFabricante());
			stmt.setString(3, vo.getModelo());
			stmt.setString(4, vo.getNum_serie());
			stmt.setString(5, vo.getMemoria());
                        stmt.setString(6, vo.getDd());
                        stmt.setString(7, vo.getFecha_adqui());
                        stmt.setString(8, vo.getEncargado());
                        stmt.setString(9, vo.getArea());
                        stmt.setString(10, vo.getIdEquipo());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(String idEquipo) throws DAOExcepcion {
		String query = "DELETE FROM inventario_hard WHERE idEquipo=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idEquipo);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<Equipo> listarTodos() throws DAOExcepcion {
		String query = "select id,idEquipo,Nombre,fabricante,modelo,num_serie,memoria,dd,fecha_adqui,encargado,area from inventario_hard";
		Collection<Equipo> c = new ArrayList<Equipo>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Equipo vo = new Equipo();
                                vo.setId(rs.getString("id"));
                                vo.setIdEquipo(rs.getString("idEquipo"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setFabricante(rs.getString("fabricante"));
				vo.setModelo(rs.getString("modelo"));
                                vo.setNum_serie(rs.getString("num_serie"));
                                vo.setMemoria(rs.getString("memoria"));
                                vo.setDd(rs.getString("dd"));
                                vo.setFecha_adqui(rs.getString("fecha_adqui"));
                                vo.setEncargado(rs.getString("encargado"));
                                vo.setArea(rs.getString("area"));
                                c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
        }

	

}